﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CIT.WMS.Common;
using CIT.WMS.EnumType;
namespace CIT.WMS.Msd
{
    public partial class MSD_Close_Manage : Form
    {
        DataTable dtMsd = new DataTable();

        public MSD_Close_Manage()
        {
            InitializeComponent();
        }

        private void txtSerialNumber_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                if (!ValiedateInput())
                {
                    return;
                }
            }
        }

        private bool ValiedateInput()
        {
            if (string.IsNullOrEmpty(txtSerialNumber.Text.Trim()))
            {
                PublicUtils.ShowMsg(this.txtSerialNumber, "ReelID不能为空", false);
                txtSerialNumber.SelectAll();
                txtSerialNumber.Focus();
                return false;
            }
            dtMsd = MSDService.Query(string.Format(" AND a.SerialNumber='{0}'", txtSerialNumber.Text.Trim()));
            if (dtMsd.Rows.Count == 0)//校验库存表是否存在该条码
            {
                PublicUtils.ShowMsg(this.lab_msg, "ReelID错误", false);
                txtSerialNumber.SelectAll();
                txtSerialNumber.Focus();
                return false;
            }
            else
            {
                #region 校验是否MSD/状态/是否重复密封
                if (ConvertUtils.ChangeNullToString(dtMsd.Rows[0]["IsMSD"]) != "0")//校验是否是MSD
                {
                    PublicUtils.ShowMsg(this.lab_msg, "ReelID非MSD", false);
                    txtSerialNumber.SelectAll();
                    txtSerialNumber.Focus();
                    return false;
                }
                //ConvertUtils.ChangeNullToString(dtMsd.Rows[0]["Status"]) != string.Empty &&
                if (
                    ConvertUtils.ChangeNullToString(dtMsd.Rows[0]["Status"]) != "1" &&
                    ConvertUtils.ChangeNullToString(dtMsd.Rows[0]["Status"]) != "6")
                //校验MSD是否可以密封,只有拆封 和出烘烤箱 两个状态可以进行密封
                {
                    PublicUtils.ShowMsg(this.lab_msg, "ReelID当前状态不允许密封", false);
                    txtSerialNumber.SelectAll();
                    txtSerialNumber.Focus();
                    return false;
                }
                if (ConvertUtils.ChangeNullToString(dtMsd.Rows[0]["Status"]) == "2")
                //已经密封的物料不允许再次密封
                {
                    PublicUtils.ShowMsg(this.lab_msg, "ReelID请勿重复密封", false);
                    txtSerialNumber.SelectAll();
                    txtSerialNumber.Focus();
                    return false;
                }
                #endregion
                string close_msg = string.Empty;
                if (ConvertUtils.ChangeNullToInt(dtMsd.Rows[0]["Status"], 0) == (int)MSD_Operation_Enum.Open || (int)MSD_Operation_Enum.End_Bake == ConvertUtils.ChangeNullToInt(dtMsd.Rows[0]["Status"], 0))
                {
                    MSDService.CalExposeTime(txtSerialNumber.Text.Trim(), out close_msg);
                }
                else
                {
                    PublicUtils.ShowMsg(this.lab_msg, "ReelID当前状态不允许密封", false);
                    txtSerialNumber.SelectAll();
                    txtSerialNumber.Focus();
                    return false;
                }
                #region 密封操作
                if (ConvertUtils.ChangeNullToInt(dtMsd.Rows[0]["Status"], 0) == (int)MSD_Operation_Enum.Open)
                {
                    //已拆封的物料MSD实际暴露时间超过暴露时间，则需要烘烤后才能密封
                    #region 已经拆封的，暴露时间未超过，不经过烘烤直接进行密封,超过则提示要经过烘烤方可密封
                    if (close_msg != "OK")
                    {
                        PublicUtils.ShowMsg(this.lab_msg, close_msg, false);
                        txtSerialNumber.SelectAll();
                        txtSerialNumber.Focus();
                        return false;
                    }
                    else
                    {
                        #region 进行密封
                        MSDService.Close_MSD(txtSerialNumber.Text.Trim(), out close_msg, MSD_Operation_Enum.Open);
                        if (close_msg == "OK")
                        {
                            PublicUtils.ShowMsg(this.lab_msg, "密封成功", true);
                            PublicUtils.WriteLog(txtSerialNumber.Text.Trim(), "密封", ConvertUtils.ChangeNullToString(dtMsd.Rows[0]["MaterialCode"]), ConvertUtils.ChangeNullToInt(dtMsd.Rows[0]["QTY"], 0));
                            txtSerialNumber.Text = string.Empty;
                            txtSerialNumber.Focus();
                            return true;
                        }
                        else
                        {
                            PublicUtils.ShowMsg(this.lab_msg, close_msg, false);
                            txtSerialNumber.SelectAll();
                            txtSerialNumber.Focus();
                            return false;
                        }
                        #endregion
                    }
                    #endregion
                }
                else
                {
                    //MSD经过烘烤后在进行密封
                    #region 经过烘烤后在进行密封
                    //if (close_msg != "OK")
                    //{
                    //    PublicUtils.ShowMsg(this.lab_msg, close_msg, false);
                    //    txtSerialNumber.SelectAll();
                    //    txtSerialNumber.Focus();
                    //    return false;
                    //}
                    if (ConvertUtils.ChangeNullToInt(dtMsd.Rows[0]["Status"], 0) == (int)MSD_Operation_Enum.End_Bake)
                    {
                        #region 进行密封
                        MSDService.Close_MSD(txtSerialNumber.Text.Trim(), out close_msg, MSD_Operation_Enum.End_Bake);
                        if (close_msg == "OK")
                        {
                            PublicUtils.ShowMsg(this.lab_msg, "密封成功", true);
                            PublicUtils.WriteLog(txtSerialNumber.Text.Trim(), "密封", ConvertUtils.ChangeNullToString(dtMsd.Rows[0]["MaterialCode"]), ConvertUtils.ChangeNullToInt(dtMsd.Rows[0]["QTY"], 0));
                            txtSerialNumber.Text = string.Empty;
                            txtSerialNumber.Focus();
                            return true;
                        }
                        else
                        {
                            PublicUtils.ShowMsg(this.lab_msg, close_msg, false);
                            txtSerialNumber.SelectAll();
                            txtSerialNumber.Focus();
                            return false;
                        }
                        #endregion
                    }
                    else
                    {
                        PublicUtils.ShowMsg(this.lab_msg, "当前状态不允许进行密封操作", false);
                        txtSerialNumber.SelectAll();
                        txtSerialNumber.Focus();
                        return false;
                    }
                    #endregion
                }
                #endregion
            }
        }
    }
}